自動測試,尤其是單元測試,是一切工程實踐的起點(另一個是 build server + CI)。
很多人只是把「測試」拿來當「驗證產品程式碼對不對」用,自然 ROI 很低,而且很多時候單元測試會反應許多設計上的 code smell,使用上的不便利(易用性)。
越是需求異動,越得改產品程式碼,越容易改壞,越需要測試保護。(把 CLD 畫出來這件事之間的因果關係再好懂不過了)
寫測試就像買保險,是需要投入成本的,是需要考慮 ROI 的,一般保險要嘛針對風險過高,發生事情時得付出的成本過大,所以買保險有保障。要嘛針對發生問題保險報酬很高的情況下,投資成本買保險。
還有一種是大家忽略,但最長久的,「降低你買保險的成本」,你的 ROI 自然就會提高。我在 legacy code 或新的需求上,寫單元測試跟維護測試的成本,可能是一般工程師的 1/10 或 1/100。也就是這張保單如果是花100買,賠500的話,同樣的保單我只需要花1-10元就能買。
Deadline 是個具體事實,一樣的 deadline 能做多少事來發揮價值,取決於自己的能力跟選擇,而這也決定了身為 developer 的你代表多少價值。
—
補上我會用測試來幫忙什麼:
我在譯者序的一個段落:測試驅動開發(Test-Driven Development, TDD)!一種以測試為開發輔助、以測試來描述需求情境、以測試來當作目標、以測試來表達期望、以測試來驗證疑問、以測試來實驗學習、以測試來溝通協作、以測試來協助設計高易用性 API 的「開發方法」。
譯者序:https://tdd.best/book/tdd-by-example/